“Undo” and “Redo” functionality in a software application allow the user to take back unintended operations (Undo), and then, if desired, undo the Undo operation (Redo). This is a straightforward operation for primarily text entry programs such as a word processing program or spreadsheet program, as the keystrokes and other actions taken by a user (input stimulus) can be queued, with the queued actions reversed for an Undo command or moved forward for a Redo command.
Digital art applications, such as those that digitally paint a canvas/surface, are not as straightforward with respect to Undo and Redo. In general, the nature of the paint operations is such that they interact with (e.g., mix with) existing pixels on the surface and other associated state data. Because of the entropy produced in the paint mixing process, the operations cannot be reversed based on providing an inverted input stimulus.
Instead, the information needed to perform Undo needs to be computed by comparing the “before” and “after” states of the paint operation during the paint process. Simply capturing the states is computationally too expensive in terms of the resources available on contemporary, commercially available computing devices, and even if feasible, would cause users who interact with the paint surface to experience an observable and undesirable delay every time a brushstroke or the like is entered.